Application programs such as Adobe Acrobat™, Adobe Photoshop™, Microsoft Internet Explorer™, Microsoft Word™, etc., can be supplemented by third party software producers through the inclusion of application “extensions.” Such application extensions “extend” the functionality of the host program by adding third party software functionality to the host program, or optionally may override certain functionality in the host program. Sometimes, such extensions are referred to in the art as “plug ins.”
For example, as shown in FIG. 1, a screen shot of the graphical user interface 10 of Microsoft Word is shown. In this example, Microsoft Word, the hosting program, has been extended to include functionality from a third party software product called “Garret.” Accordingly, certain functional aspects of the Garret program have been made available within Word as the hosting program, which can occur in any number of ways. For example, the Garret application extension can cause a “Garret” drop-down menu 18 to be displayed as a modification to Word's standard menu bar 12. Although not shown, this drop-down menu 18 would allow the user to access the loaded functionality from the Garret extension (or extensions). Alternatively, menu options specific to the loaded Garret extension may appear as selections within the standard menu options already present on the standard menu bar 12 without the need for a separate Garret drop-down menu 18, although this is not shown.
Additionally, the loaded extension may cause a “Garret” tool bar 16 to appear in the user interface 10, providing buttons or drop-down windows to again allow the user to access the loaded functionality provided by the extension(s). Such extension buttons may be separate from or integrated with the standard tool bar 14 otherwise provided by Word as the hosting program. Of course, these manners of modifying the user interface of the hosting program by the extensions are merely exemplary. Alternatively, some of the aspects of the loaded extensions may not be visible to the user and/or may not cause modification of the graphical user interface 10.
For extensions to operate in this fashion, the hosting program must include an Application Programming Interface (API) to allow the extensions to register with the host program. After being registered, the registered extensions are loaded when the host program is initialized, e.g., when the user runs the host program or when the host program is otherwise made to run automatically. In short, when the host program is initialized, the extensions too are loaded and initialized. But the additional computer resources required to load the registered extensions can make initializing the host program slow. For example, in the example shown in FIG. 1, when Word is initialized, the registered extensions may require queries to certain files or code fragments within the Garret program, and these files or code fragments may be scattered elsewhere on the computer's hard drive, i.e., wherever the Garret program is ultimately stored. Of course, the additional time taken to initialize the Word program is further lengthened if there are several registered extensions for a given program (such as “Garret”), and/or if extensions from many different third party software programs are used. At some point, this additional time becomes unsatisfactory to the user, who generally will not wish to wait more than a few seconds for the host program to initialize.
Further compounding this problem is the fact that all registered extensions are typically loaded regardless of whether they will be used. For example, suppose a Garret extension 22 (in this case, a button) provides certain additional functionality to the Word program, e.g., by providing an additional spell checking feature. It may be the case that the user never wishes to access this additional spell checking feature (perhaps because the user is comfortable using the spell checking feature already provided by Word), or that the user will use this feature only occasionally (e.g., one time out of every twenty times the user runs the Word program). In such cases, using processing resources (and time) to load the Garret extension for the spell checking feature is generally wasteful. Again, the overall problem is compounded when one realizes that a particular hosting program might potentially have hundreds of extensions that are registered to it, of which some will never (or only occasionally) be selected by the user or automatically by the host program.
One solution to this problem is to simply not allow the extensions to load, or to load them at a time when the functionality that the extension provides is selected or called. For example, in Microsoft's Internet Explorer (IE) program, and as shown in FIG. 2, a registry directory 30 is provided by which extensions can register themselves with IE as the host program. Specifically, the extensions 32, 34 are preferably (from IE's point of view) accompanied by registry keys 36, 38 in the registry directory 30. The registry keys 36, 38 can constitute pointers to where the extensions, and certain specific information concerning the extensions, are stored. Thus, when IE initializes, it reviews the registry keys 36, 38, and gathers (for example) bit maps from the extensions relating to changes in the graphical user interface that the extensions would have IE make. For example, if extension 32 would have IE place a button (such as 22) on a tool bar, the bit map for that button would be fetched as specified by the key 36. Thus, when IE initializes, it in theory is able to merely consult the keys 36, 38, gather the appropriate minimal information from the extensions, and make necessary changes to the user interface so that it appears to the user that the extensions 32, 34 have been fully loaded. However, the extension is not in fact loaded at this time, but instead is fully loaded when and if the functionality pertaining to that extension is called (such as by selecting button 22). Accordingly, this scheme potentially allows the extensions to be loaded only when and if they are engaged, saving time during the initialization of the host program.
But there are drawbacks to this approach. First, as just mentioned, the host program (i.e., IE) would potentially need to load or read a number of pieces of data (e.g., the bit maps) from the extensions programs upon initialization as specified by the keys 36, 38. As these pieces of data would reside with the extension programs, they would be randomly scattered throughout the computer's hard drive, thus requiring at least some processing and time to retrieve them upon the host program's initialization. Second, by virtue of this approach, the host program shifts responsibility to the extension programmers to write their extensions 32, 34 (or at least their keys 36, 38) in a manner specified by the host program to allow for efficient processing of the type set forth above. This requires the extension programmers to have knowledge of the host program's desired formats for registration, which they may not have even if such optional formatting schemes are made public as part of the API. Moreover, extension program writers may lack incentive to code their extensions in this way, which results in yet a third drawback: despite IE's permitted acceptance of register keys 36, 38 to help facilitate loading of the extension, the fact remains that IE does not require the use of register keys, i.e., does not require the registering extension to partake of time-saving extension-loading key-based scheme discussed above. Thus, as illustrated by extension 40 in FIG. 2, an extension can fail to provide a key to IE's registry domain 30, and instead can merely provide the extension to the registry domain, thereby causing the extension to fully load when the host program is initialized. Should all extensions decide not to use the host program's registration format, all benefits of the scheme are lost. Fourth, once a registry key format has been set by the host program to allow for efficient extension loading, that format must thereafter continue to be supported by the host program, or extension programs relying on that format will not be recognized. Fifth, this scheme provides a solution for only the simplest user interface additions. It does not address non-user interface additions, deletions, or modifications, nor user interface modifications or additions. Thus many extensions may not use such a scheme.
Accordingly, the software art would be benefited by a better solution to the problem of efficient initialization of a host program to which extensions have been registered.